package com.itheima.b_string;

/**
 * 目标：掌握字符串对象的创建方式
 * <p>
 * 通过构造方法创建String对象
 * 1、String ()
 * 2、String (String original)
 * 3、String (char[] value)
 * 4、String (byte[] bytes)
 */
public class StringDemo01 {

    public static void main(String[] args) {
        //1.方式一： Java 程序中的所有字符串文字（例如“abc”）都为此类的对象
        String s1 = "abc";
        //以前打印一个对象变量，打印的是对象地址值，但是String对象底层做了处理，会直接打印字符串内容
        System.out.println(s1);

        //2.方式二： 调用String类的构造器初始化字符串对象
        //String()：创建一个内容为""的字符串对象
        String s2 = new String();
        System.out.println(s2);

        //String(String s)：根据传入的字符串，得到一个新的字符串对象
        String s3 = new String("abc");
        System.out.println(s3);

        //String(char[] chs)：根据传入的字符数组，得到一个字符串对象
        char[] chs = {'a', 'b', 'c'};
        String s4 = new String(chs);
        System.out.println(s4);

        //String(byte[] bys)：根据传入的字节数组中的字节数据，得到字符串对象
        byte[] bys = {97, 98, 99};
        String s5 = new String(bys);
        //提供字节数组，会将字节数组中的整数按编码表中对应的字符拼接得到字符串！
        System.out.println(s5);

        //3.这里可以使用一个固定代码，看到String对象的地址值： System.identityHashCode(字符串对象);
        int address1 = System.identityHashCode(s1);
        System.out.println("s1对象的地址值：" + address1);
        int address2 = System.identityHashCode(s2);
        System.out.println("s2对象的地址值：" + address2);
        //两个字符串对象的内容一样，但是空间地址可能是不一样的！

    }
}
